﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Marmat.Forms.Win32API
{
    /// <summary>
    /// Windows 消息枚举
    /// </summary>
    public sealed class MessageEnum
    {
        /// <summary>
        /// 空消息，此消息将被接收窗口忽略
        /// </summary>
        public const int WM_NULL = 0x0000;

        /// <summary>
        /// 应用程序创建一个窗口
        /// </summary>
        public const int WM_CREATE = 0x0001;

        /// <summary>
        /// 一个窗口被销毁
        /// </summary>
        public const int WM_DESTROY = 0x0002;

        /// <summary>
        /// 移动一个窗口
        /// </summary>
        public const int WM_MOVE = 0x0003;

        /// <summary>
        /// 改变一个窗口的大小
        /// </summary>
        public const int WM_SIZE = 0x0005;

        /// <summary>
        /// 一个窗口被激活或失去激活状态
        /// </summary>
        public const int WM_ACTIVATE = 0x0006;

        /// <summary>
        /// 获得焦点后
        /// </summary>
        public const int WM_SETFOCUS = 0x0007;

        /// <summary>
        /// 失去焦点
        /// </summary>
        public const int WM_KILLFOCUS = 0x0008;

        /// <summary>
        /// 应用程序Enable状态改变时产生
        /// </summary>
        public const int WM_ENABLE = 0x000A;

        /// <summary>
        /// 设置窗口是否能重画
        /// </summary>
        public const int WM_SETREDRAW = 0x000B;

        /// <summary>
        /// 应用程序发送此消息来设置一个窗口的文本
        /// </summary>
        public const int WM_SETTEXT = 0x000C;

        /// <summary>
        /// 应用程序发送此消息来复制对应窗口的文本到缓冲区
        /// </summary>
        public const int WM_GETTEXT = 0x000D;

        /// <summary>
        /// 得到与一个窗口有关的文本的长度（不包含空字符）
        /// </summary>
        public const int WM_GETTEXTLENGTH = 0x000E;

        /// <summary>
        /// 要求一个窗口重绘自己
        /// </summary>
        public const int WM_PAINT = 0x000F;

        /// <summary>
        /// 当一个窗口或应用程序要关闭时发送一个信号
        /// </summary>
        public const int WM_CLOSE = 0x0010;

        /// <summary>
        /// 用户选择结束对话框或应用程序自己调用ExitWindows()函数
        /// </summary>
        public const int WM_QUERYENDSESSION = 0x0011;

        /// <summary>
        /// 用来结束程序运行或应用程序调用Postquitmessage()函数来产生此消息
        /// </summary>
        public const int WM_QUIT = 0x0012;

        /// <summary>
        /// 当用户窗口恢复以前的大小位置时，把此消息发送给某个图标
        /// </summary>
        public const int WM_QUERYOPEN = 0x0013;

        /// <summary>
        /// 当窗口背景必须被擦除时（例如在窗口改变大小时）
        /// </summary>
        public const int WM_ERASEBKGND = 0x0014;

        /// <summary>
        /// 当系统颜色改变时，发送此消息给所有顶级窗口
        /// </summary>
        public const int WM_SYSCOLORCHANGE = 0x0015;

        /// <summary>
        /// 当系统进程发出WM_QUERYENDSESSION消息后，此消息发送给应用程序
        /// </summary>
        public const int WM_ENDSESSION = 0x0016;

        /// <summary>
        /// 当隐藏或显示窗口是发送此消息给这个窗口
        /// </summary>
        public const int WM_SHOWWINDOW = 0x0018;

        /// <summary>
        /// 当某个窗口将被激活时，将被激活窗口和当前活动（即将失去激活）窗口会收到此消息，发此消息给应用程序哪个窗口是激活的，哪个是非激活的
        /// </summary>
        public const int WM_ACTIVATEAPP = 0x001C;

        /// <summary>
        /// 当系统的字体资源库变化时发送此消息给所有顶级窗口
        /// </summary>
        public const int WM_FONTCHANGE = 0x001D;

        /// <summary>
        /// 当系统的时间变化时发送此消息给所有顶级窗口
        /// </summary>
        public const int WM_TIMECHANGE = 0x001E;

        /// <summary>
        /// 发送此消息来取消某种正在进行的操作
        /// </summary>
        public const int WM_CANCELMODE = 0x001F;

        /// <summary>
        /// 如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时，发消息给该窗口
        /// </summary>
        public const int WM_SETCURSOR = 0x0020;

        /// <summary>
        /// 当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口
        /// </summary>
        public const int WM_MOUSEACTIVATE = 0x0021;

        /// <summary>
        /// 发送此消息给MDI子窗口当用户点击此窗口的标题栏，或当窗口被激活、移动、改变大小
        /// </summary>
        public const int WM_CHILDACTIVATE = 0x0022;

        /// <summary>
        /// 此消息由基于计算机的训练程序发送，通过WH_JOURNALPALYBACK的Hook程序分离出用户输入消息
        /// </summary>
        public const int WM_QUEUESYNC = 0x0023;

        /// <summary>
        /// 当窗口要将要改变大小或位置时，发送此消息给该窗口
        /// </summary>
        public const int WM_GETMINMAXINFO = 0x0024;

        /// <summary>
        /// 当窗口图标将要被重绘时，发送此消息给该窗口
        /// </summary>
        public const int WM_PAINTICON = 0x0026;

        /// <summary>
        /// 在一个最小化窗口的图标在重绘前，当图标背景必须被重绘时，发送此消息给该窗口
        /// </summary>
        public const int WM_ICONERASEBKGND = 0x0027;

        /// <summary>
        /// 发送此消息给一个对话框程序以更改焦点位置
        /// </summary>
        public const int WM_NEXTDLGCTL = 0x0028;

        /// <summary>
        /// 当打印管理列队增加或减少一条作业时发出此消息
        /// </summary>
        public const int WM_SPOOLERSTATUS = 0x002A;

        /// <summary>
        /// 当Button，ComboBox，Listbox，Menu控件的外观改变时，发送此消息给这些控件的所有者
        /// </summary>
        public const int WM_DRAWITEM = 0x002B;

        /// <summary>
        /// 当Button，ComboBox，list box，ListView，Menu 项被创建时，发送此消息给控件的所有者
        /// </summary>
        public const int WM_MEASUREITEM = 0x002C;

        /// <summary>
        /// 当ListBox 或 ComboBox 被销毁或当某些项通过发送LB_DELETESTRING、LB_RESETCONTENT、 CB_DELETESTRING、CB_RESETCONTENT 消息被删除时，发送此消息给控件的所有者
        /// </summary>
        public const int WM_DELETEITEM = 0x002D;

        /// <summary>
        /// 一个具有LBS_WANTKEYBOARDINPUT风格的ListBox控件发送此消息给它的所有者，以此来响应WM_KEYDOWN消息
        /// </summary>
        public const int WM_VKEYTOITEM = 0x002E;

        /// <summary>
        /// 一个具有LBS_WANTKEYBOARDINPUT风格的ListBox控件发送此消息给它的所有者，以此来响应WM_CHAR消息
        /// </summary>
        public const int WM_CHARTOITEM = 0x002F;

        /// <summary>
        /// 应用程序绘制控件时，发送此消息得到以何种字体绘制控件中的文本
        /// </summary>
        public const int WM_SETFONT = 0x0030;

        /// <summary>
        /// 应用程序发送此消息得到当前控件绘制文本的字体
        /// </summary>
        public const int WM_GETFONT = 0x0031;

        /// <summary>
        /// 应用程序发送此消息让一个窗口与一个热键相关联
        /// </summary>
        public const int WM_SETHOTKEY = 0x0032;

        /// <summary>
        /// 应用程序发送此消息来判断热键与某个窗口是否有关联
        /// </summary>
        public const int WM_GETHOTKEY = 0x0033;

        /// <summary>
        /// 此消息发送给最小化窗口，当此窗口将要被拖放而它的类中没有定义图标，应用程序就返回一个图标或光标的句柄，当用户拖放图标时系统显示这个图标或光标
        /// </summary>
        public const int WM_QUERYDRAGICON = 0x0037;

        /// <summary>
        /// 发送此消息来判定ComboBox或ListBox新增加的项的相对位置
        /// </summary>
        public const int WM_COMPAREITEM = 0x0039;

        /// <summary>
        /// 显示内存已经很少了
        /// </summary>
        public const int WM_COMPACTING = 0x0041;

        /// <summary>
        /// 当调用SetWindowPos()函数改变窗口的大小和位置后，发送此消息给该窗口
        /// </summary>
        public const int WM_WINDOWPOSCHANGING = 0x0046;

        /// <summary>
        /// 当系统将进入挂起状态时发送此消息给所有进程
        /// </summary>
        public const int WM_POWER = 0x0048;

        /// <summary>
        /// 当一个应用程序传递数据给另一个应用程序时发送此消息
        /// </summary>
        public const int WM_COPYDATA = 0x004A;

        /// <summary>
        /// 当某个用户取消程序日志激活状态，发送此消息给应用程序
        /// </summary>
        public const int WM_CANCELJOURNAL = 0x004B;

        /// <summary>
        /// 当某个控件的某个事件已经发生或这个控件需要得到一些信息时，发送此消息给它的父窗口
        /// </summary>
        public const int WM_NOTIFY = 0x004E;

        /// <summary>
        /// 当用户选择某种输入语言，或输入语言的热键改变
        /// </summary>
        public const int WM_INPUTLANGCHANGEREQUEST = 0x0050;

        /// <summary>
        /// 当应用程序输入语言改变后发送此消息给受影响的最顶级窗口
        /// </summary>
        public const int WM_INPUTLANGCHANGE = 0x0051;

        /// <summary>
        /// 当应用程序已经初始化Windows帮助例程时发送此消息给应用程序
        /// </summary>
        public const int WM_TCARD = 0x0052;

        /// <summary>
        /// 当用户按下了F1，如果某个菜单是激活的，就发送此消息给此窗口关联的菜单，否则就发送给有焦点的窗口，如果当前都没有焦点，就把此消息发送给当前激活的窗口
        /// </summary>
        public const int WM_HELP = 0x0053;

        /// <summary>
        /// 当用户已经登录或退出后发送此消息给所有的窗口，当用户登录或退出时系统更新用户的具体设置信息，在用户更新设置时系统马上发送此消息
        /// </summary>
        public const int WM_USERCHANGED = 0x0054;

        /// <summary>
        /// 公用控件和它们的父窗口通过此消息来判断在WM_NOTIFY消息中是使用ANSI还是UNICODE形式的结构，使用此控件能使某个控件与它的父控件进行相互通信
        /// </summary>
        public const int WM_NOTIFYFORMAT = 0x0055;

        /// <summary>
        /// 当用户在某个窗口中点击右键，则发送此消息给该窗口
        /// </summary>
        public const int WM_CONTEXTMENU = 0x007B;

        /// <summary>
        /// 当将要调用SetWindowLong()函数窗口的一个或多个风格时，发送此消息给该窗口
        /// </summary>
        public const int WM_STYLECHANGING = 0x007C;

        /// <summary>
        /// 当调用SetWindowLong()函数改变了窗口的一个或多个风格后，发送此消息给该窗口
        /// </summary>
        public const int WM_STYLECHANGED = 0x007D;

        /// <summary>
        /// 当显示器的分辨率改变后发送此消息给所有的窗口
        /// </summary>
        public const int WM_DISPLAYCHANGE = 0x007E;

        /// <summary>
        /// 发送此消息给某个窗口，返回与某个窗口有关联的大图标或小图标的句柄
        /// </summary>
        public const int WM_GETICON = 0x007F;

        /// <summary>
        /// 应用程序发送此消息让一个新的大图标或小图标与某个窗口关联
        /// </summary>
        public const int WM_SETICON = 0x0080;

        /// <summary>
        /// 当某个窗口第一次被创建时，此消息在WM_CREATE消息被发送前发送
        /// </summary>
        public const int WM_NCCREATE = 0x0081;

        /// <summary>
        /// 此消息通知某个窗口，正在销毁非客户区
        /// </summary>
        public const int WM_NCDESTROY = 0x0082;

        /// <summary>
        /// 当计算某个窗口的客户区大小和位置时发送此消息
        /// </summary>
        public const int WM_NCCALCSIZE = 0x0083;

        /// <summary>
        /// 移动鼠标，按住或释放鼠标时产生此消息
        /// </summary>
        public const int WM_NCHITTEST = 0x0084;

        /// <summary>
        /// 当某个窗口的框架必须被绘制时，应用程序发送此消息给该窗口
        /// </summary>
        public const int WM_NCPAINT = 0x0085;

        /// <summary>
        /// 通过改变某个窗口的非客户区来表示窗口是处于激活还是非激活状态时，此消息被发送给该窗口
        /// </summary>
        public const int WM_NCACTIVATE = 0x0086;

        /// <summary>
        /// 当光标在窗口的非客户区（窗口标题栏及边框）内移动时发送此消息给该窗口
        /// </summary>
        public const int WM_NCMOUSEMOVE = 0x00A0;

        /// <summary>
        /// 当光标在窗口的非客户区并按下鼠标左键时发送此消息
        /// </summary>
        public const int WM_NCLBUTTONDOWN = 0x00A1;

        /// <summary>
        /// 当光标在窗口的非客户区并释放鼠标左键时发送此消息
        /// </summary>
        public const int WM_NCLBUTTONUP = 0x00A2;

        /// <summary>
        /// 当光标在窗口的非客户区并双击鼠标左键时发送此消息
        /// </summary>
        public const int WM_NCLBUTTONDBLCLK = 0x00A3;

        /// <summary>
        /// 当光标在窗口的非客户区并按下鼠标右键时发送此消息
        /// </summary>
        public const int WM_NCRBUTTONDOWN = 0x00A4;

        /// <summary>
        /// 当光标在窗口的非客户区并释放鼠标右键时发送此消息
        /// </summary>
        public const int WM_NCRBUTTONUP = 0x00A5;

        /// <summary>
        /// 当光标在窗口的非客户区并双击鼠标右键时发送此消息
        /// </summary>
        public const int WM_NCRBUTTONDBLCLK = 0x00A6;

        /// <summary>
        /// 当光标在窗口的非客户区并按下鼠标中键时发送此消息
        /// </summary>
        public const int WM_NCMBUTTONDOWN = 0x00A7;

        /// <summary>
        /// 当光标在窗口的非客户区并释放鼠标中键时发送此消息
        /// </summary>
        public const int WM_NCMBUTTONUP = 0x00A8;

        /// <summary>
        /// 当光标在窗口的非客户区并双击鼠标中键时发送此消息
        /// </summary>
        public const int WM_NCMBUTTONDBLCL = 0x00A9;

        /// <summary>
        /// 按下一个非系统键（按下键时未按下“ALT”键）
        /// </summary>
        public const int WM_KEYDOWN = 0x0100;

        /// <summary>
        /// 释放一个非系统键
        /// </summary>
        public const int WM_KEYUP = 0x0101;

        /// <summary>
        /// 按下某键，当TranslateMessage()转发WM_KEYDOWN后发送本消息
        /// </summary>
        public const int WM_CHAR = 0x0102;

        /// <summary>
        /// 释放某键，当TranslateMessage()转发WM_KEYUP后发送本消息
        /// </summary>
        public const int WM_DEADCHAR = 0x0103;

        /// <summary>
        /// 当按住ALT键同时按下其他键时发送此消息给拥有键盘焦点的窗口
        /// </summary>
        public const int WM_SYSKEYDOWN = 0x0104;

        /// <summary>
        /// 当释放一个键同时按住ALT键时发送此消息给拥有键盘焦点的窗口
        /// </summary>
        public const int WM_SYSKEYUP = 0x0105;

        /// <summary>
        /// 当TranslateMessage()转发WM_SYSKEYDOWN后发送此消息给拥有键盘焦点的窗口
        /// </summary>
        public const int WM_SYSCHAR = 0x0106;

        /// <summary>
        /// 当TranslateMessage()转发WM_SYSKEYUP后发送此消息给拥有键盘焦点的窗口
        /// </summary>
        public const int WM_SYSDEADCHAR = 0x0107;

        /// <summary>
        /// 在被显示前发送此消息对话框，通常用此消息初始化控件和执行其他任务
        /// </summary>
        public const int WM_INITDIALOG = 0x0110;

        /// <summary>
        /// 选择窗口菜单项或某个控件发送一条消息给它的父窗口或按下一个快捷键时产生此消息
        /// </summary>
        public const int WM_COMMAND = 0x0111;

        /// <summary>
        /// 选择窗口菜单项或选择最大化或最小化时，发送此消息给该窗口
        /// </summary>
        public const int WM_SYSCOMMAND = 0x0112;

        /// <summary>
        /// 发生了定时器事件
        /// </summary>
        public const int WM_TIMER = 0x0113;

        /// <summary>
        /// 当窗口水平滚动条产生一个滚动事件时发送此消息给该窗口和滚动条的所有者
        /// </summary>
        public const int WM_HSCROLL = 0x0114;

        /// <summary>
        /// 当窗口垂直滚动条产生一个滚动事件时发送此消息给该窗口和滚动条的所有者
        /// </summary>
        public const int WM_VSCROLL = 0x0115;

        /// <summary>
        /// 当一个菜单将要被激活时发送此消息，它发生在按下菜单项或按下菜单快捷键时，它允许程序在显示前更改菜单
        /// </summary>
        public const int WM_INITMENU = 0x0116;

        /// <summary>
        /// 当一个下拉菜单或子菜单将要被激活时发送此消息，它允许显示前在修改菜单而不必更改整个菜单
        /// </summary>
        public const int WM_INITMENUPOPUP = 0x0117;

        /// <summary>
        /// 选择一条菜单项时发送此消息给菜单的所有者（一般是窗口）
        /// </summary>
        public const int WM_MENUSELECT = 0x011F;

        /// <summary>
        /// 当菜单已被激活且用户按下了某个键（非快捷键），发送此消息给菜单的所有者
        /// </summary>
        public const int WM_MENUCHAR = 0x0120;

        /// <summary>
        /// 当一个有模式对话框或菜单进入空闲状态时发送此消息给它的所有者，空闲状态指在处理完一条或几条先前的消息后，消息列队为空
        /// </summary>
        public const int WM_ENTERIDLE = 0x0121;

        /// <summary>
        /// 当光标位于菜单项上时，释放鼠标右键产生此消息
        /// </summary>
        public const int WM_MENURBUTTONUP = 0x0122;

        /// <summary>
        /// 当拖动菜单项时，发送此消息给拖放菜单的所有者
        /// </summary>
        public const int WM_MENUDRAG = 0x0123;

        /// <summary>
        /// 当光标移入菜单项或者从菜单项中心移到菜单项顶部或底部时，发送此消息给拖放菜单的所有者
        /// </summary>
        public const int WM_MENUGETOBJECT = 0x0124;

        /// <summary>
        /// 当下拉菜单或者子菜单被销毁时产生此消息
        /// </summary>
        public const int WM_UNINITMENUPOPUP = 0x0125;

        /// <summary>
        /// 当用户选择菜单项时产生此消息
        /// </summary>
        public const int WM_MENUCOMMAND = 0x0126;

        /// <summary>
        /// 应用程序发送此消息表明用户界面（UI）状态应当被改变
        /// </summary>
        public const int WM_CHANGEUISTATE = 0x0127;

        /// <summary>
        /// 应用程序发送此消息改变指定窗口及其子窗口的用户界面（UI）状态
        /// </summary>
        public const int WM_UPDATEUISTATE = 0x0128;

        /// <summary>
        /// 应用程序发送此消息得到某个窗口的用户界面（UI）状态
        /// </summary>
        public const int WM_QUERYUISTATE = 0x0129;

        /// <summary>
        /// 绘制消息框前发送此消息给它的父窗口，通过响应这条消息，父窗口可以通过使用给定的相关显示设备的句柄来设置消息框的文本和背景颜色
        /// </summary>
        public const int WM_CTLCOLORMSGBOX = 0x0132;

        /// <summary>
        /// 绘制编辑型控件前发送此消息给它的父窗口，可用来设置编辑框的文本和背景颜色
        /// </summary>
        public const int WM_CTLCOLOREDIT = 0x0133;

        /// <summary>
        /// 绘制列表框控件前发送此消息给它的父窗口，可用来设置编辑框的文本和背景颜色
        /// </summary>
        public const int WM_CTLCOLORLISTBOX = 0x0134;

        /// <summary>
        /// 绘制按钮控件前发送此消息给它的父窗口，可用来设置编辑框的文本和背景颜色
        /// </summary>
        public const int WM_CTLCOLORBTN = 0x0135;

        /// <summary>
        /// 绘制对话框前发送此消息给它的父窗口，可用来设置编辑框的文本和背景颜色
        /// </summary>
        public const int WM_CTLCOLORDLG = 0x0136;

        /// <summary>
        /// 绘制滚动条控件前发送此消息给它的父窗口，可用来设置滚动条控件的文本和背景颜色
        /// </summary>
        public const int WM_CTLCOLORSCROLLBAR = 0x0137;

        /// <summary>
        /// 绘制静态控件前发送此消息给它的父窗口，可用来设置静态控件的文本和背景颜色
        /// </summary>
        public const int WM_CTLCOLORSTATIC = 0x0138;

        /// <summary>
        /// 鼠标移动
        /// </summary>
        public const int WM_MOUSEMOVE = 0x0200;

        /// <summary>
        /// 按下鼠标左键
        /// </summary>
        public const int WM_LBUTTONDOWN = 0x0201;

        /// <summary>
        /// 释放鼠标左键
        /// </summary>
        public const int WM_LBUTTONUP = 0x0202;

        /// <summary>
        /// 双击鼠标左键
        /// </summary>
        public const int WM_LBUTTONDBLCLK = 0x0203;

        /// <summary>
        /// 按下鼠标右键
        /// </summary>
        public const int WM_RBUTTONDOWN = 0x0204;

        /// <summary>
        /// 释放鼠标右键
        /// </summary>
        public const int WM_RBUTTONUP = 0x0205;

        /// <summary>
        /// 双击鼠标右键
        /// </summary>
        public const int WM_RBUTTONDBLCLK = 0x0206;

        /// <summary>
        /// 按下鼠标中键
        /// </summary>
        public const int WM_MBUTTONDOWN = 0x0207;

        /// <summary>
        /// 释放鼠标中键
        /// </summary>
        public const int WM_MBUTTONUP = 0x0208;

        /// <summary>
        /// 双击鼠标中键
        /// </summary>
        public const int WM_MBUTTONDBLCLK = 0x0209;

        /// <summary>
        /// 当鼠标滚轮转动时发送此消息给当前获得焦点的窗口
        /// </summary>
        public const int WM_MOUSEWHEEL = 0x020A;

        /// <summary>
        /// 当MDI子窗口被创建或被销毁，或当光标位于子窗口上且用户按了一下鼠标键时，发送此消息给它的父窗口
        /// </summary>
        public const int WM_PARENTNOTIFY = 0x0210;

        /// <summary>
        /// 发送此消息通知应用程序的主窗口进程已经进入了菜单模式循环
        /// </summary>
        public const int WM_ENTERMENULOOP = 0x0211;

        /// <summary>
        /// 发送此消息通知应用程序的主窗口进程已经退出了菜单模式循环
        /// </summary>
        public const int WM_EXITMENULOOP = 0x0212;

        /// <summary>
        /// 调整窗口大小时发送此消息给窗口，通过此消息应用程序可以监视或修改窗口大小和位置
        /// </summary>
        public const int WM_SIZING = 0x0214;

        /// <summary>
        /// 当窗口设定为不捕获鼠标事件时，发送此消息给该窗口
        /// </summary>
        public const int WM_CAPTURECHANGED = 0x0215;

        /// <summary>
        /// 移动窗口时发送此消息给窗口，通过此消息应用程序可以监视或修改窗口大小和位置
        /// </summary>
        public const int WM_MOVING = 0x0216;

        /// <summary>
        /// 发送此消息给应用程序通知它有关电源管理事件
        /// </summary>
        public const int WM_POWERBROADCAST = 0x0218;

        /// <summary>
        /// 当设备的硬件配置改变时发送此消息给应用程序或设备驱动程序
        /// </summary>
        public const int WM_DEVICECHANGE = 0x0219;

        /// <summary>
        /// 应用程序发送此消息给多文档的客户窗口来创建一个MDI 子窗口
        /// </summary>
        public const int WM_MDICREATE = 0x0220;

        /// <summary>
        /// 应用程序发送此消息给多文档的客户窗口来关闭一个MDI 子窗口
        /// </summary>
        public const int WM_MDIDESTROY = 0x0221;

        /// <summary>
        /// 应用程序发送此消息给多文档的客户窗口通知客户窗口激活另一个MDI子窗口，当客户窗口收到此消息后，它发出WM_MDIACTIVE消息给MDI子窗口（未激活）来激活它
        /// </summary>
        public const int WM_MDIACTIVATE = 0x0222;

        /// <summary>
        /// 应用程序发送此消息给MDI客户窗口通知子窗口恢复到原来大小
        /// </summary>
        public const int WM_MDIRESTORE = 0x0223;

        /// <summary>
        /// 应用程序发送此消息给MDI客户窗口激活下一个或前一个窗口
        /// </summary>
        public const int WM_MDINEXT = 0x0224;

        /// <summary>
        /// 应用程序发送此消息给MDI客户窗口以最大化一个MDI子窗口
        /// </summary>
        public const int WM_MDIMAXIMIZE = 0x0225;

        /// <summary>
        /// 应用程序发送此消息给MDI客户窗口以平铺方式重新排列所有MDI子窗口
        /// </summary>
        public const int WM_MDITILE = 0x0226;

        /// <summary>
        /// 应用程序发送此消息给MDI客户窗口以层叠方式重新排列所有MDI子窗口
        /// </summary>
        public const int WM_MDICASCADE = 0x0227;

        /// <summary>
        /// 应用程序发送此消息给MDI客户窗口重新排列所有最小化的MDI子窗口
        /// </summary>
        public const int WM_MDIICONARRANGE = 0x0228;

        /// <summary>
        /// 应用程序发送此消息给MDI客户窗口以找到激活的子窗口的句柄
        /// </summary>
        public const int WM_MDIGETACTIVE = 0x0229;

        /// <summary>
        /// 应用程序发送此消息给MDI客户窗口用MDI菜单代替子窗口的菜单
        /// </summary>
        public const int WM_MDISETMENU = 0x0230;

        /// <summary>
        /// 当窗口进入移动或改变大小模式循环时，发送此消息给该窗口
        /// </summary>
        public const int WM_ENTERSIZEMOVE = 0x0231;

        /// <summary>
        /// 当窗口退出移动或改变大小模式循环时，发送此消息给该窗口
        /// </summary>
        public const int WM_EXITSIZEMOVE = 0x0232;

        /// <summary>
        /// 当用户在应用程序窗口中拖动某个文件时，产生此消息
        /// </summary>
        public const int WM_DROPFILES = 0x0233;

        /// <summary>
        /// 应用程序发送此消息给MDI客户窗口以刷新窗口菜单
        /// </summary>
        public const int WM_MDIREFRESHMENU = 0x0234;

        /// <summary>
        /// 当光标在窗口客户区悬停超过TrackMouseEvent()指定的时间时，发送此消息给该窗口
        /// </summary>
        public const int WM_MOUSEHOVER = 0x02A1;

        /// <summary>
        /// 当光标离开窗口客户区超过TrackMouseEvent()指定的时间时，发送此消息给该窗口
        /// </summary>
        public const int WM_MOUSELEAVE = 0x02A3;

        /// <summary>
        /// 应用程序发送此消息给一个编辑框或ComboBox以删除当前选择的文本
        /// </summary>
        public const int WM_CUT = 0x0300;

        /// <summary>
        /// 应用程序发送此消息给一个编辑框或ComboBox以复制当前选择的文本到剪贴板
        /// </summary>
        public const int WM_COPY = 0x0301;

        /// <summary>
        /// 应用程序发送此消息给一个编辑框或ComboBox以从剪贴板中得到数据
        /// </summary>
        public const int WM_PASTE = 0x0302;

        /// <summary>
        /// 应用程序发送此消息给一个编辑框或ComboBox以清除当前选择的内容
        /// </summary>
        public const int WM_CLEAR = 0x0303;

        /// <summary>
        /// 应用程序发送此消息给一个编辑框或ComboBox以撤消最后一次操作
        /// </summary>
        public const int WM_UNDO = 0x0304;

        /// <summary>
        /// 当调用EmptyClipboard()清空剪贴板时，发送此消息给剪贴板所有者
        /// </summary>
        public const int WM_DESTROYCLIPBOARD = 0x0307;

        /// <summary>
        /// 当剪贴板的内容变化时发送此消息给剪贴板观察链中的第一个窗口，它允许用剪贴板观察窗口来显示剪贴板的新内容
        /// </summary>
        public const int WM_DRAWCLIPBOARD = 0x0308;

        /// <summary>
        /// 当剪贴板包含CF_OWNERDIPLAY格式的数据且剪贴板观察窗口的客户区需要重绘时，发送此消息给剪贴板所有者
        /// </summary>
        public const int WM_PAINTCLIPBOARD = 0x0309;

        /// <summary>
        /// 当剪贴板包含CF_OWNERDIPLAY格式的数据且剪贴板观察窗口发生垂直滚动条事件时，剪贴板观察窗口发送此消息给剪贴板所有者
        /// </summary>
        public const int WM_VSCROLLCLIPBOARD = 0x030A;

        /// <summary>
        /// 当剪贴板包含CF_OWNERDIPLAY格式的数据且剪贴板观察窗口的客户区域的大小已经改变时，剪贴板观察窗口发送此消息给剪贴板的所有者
        /// </summary>
        public const int WM_SIZECLIPBOARD = 0x030B;

        /// <summary>
        /// 剪贴板观察窗口发送此消息给剪贴板所有者以获得CF_OWNERDISPLAY剪贴板格式的名字
        /// </summary>
        public const int WM_ASKCBFORMATNAME = 0x030C;

        /// <summary>
        /// 当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链中的第一个窗口
        /// </summary>
        public const int WM_CHANGECBCHAIN = 0x030D;

        /// <summary>
        /// 当剪贴板包含CF_OWNERDIPLAY格式的数据且剪贴板观察窗口发生水平滚动条事件时，剪贴板观察窗口发送此消息给剪贴板所有者
        /// </summary>
        public const int WM_HSCROLLCLIPBOARD = 0x030E;

        /// <summary>
        /// 发送此消息给将要获得键盘焦点的窗口，此消息使窗口在获得焦点时同时有机会实现它的逻辑调色板
        /// </summary>
        public const int WM_QUERYNEWPALETTE = 0x030F;

        /// <summary>
        /// 应用程序将要实现它的逻辑调色板时发送此消息通知所有应用程序
        /// </summary>
        public const int WM_PALETTEISCHANGING = 0x0310;

        /// <summary>
        /// 获得焦点的窗口实现它的逻辑调色板后发送此消息给所有顶级并重叠的窗口，以此来改变系统调色板
        /// </summary>
        public const int WM_PALETTECHANGED = 0x0311;

        /// <summary>
        /// 当用户按下由RegisterHotKey()注册的热键时产生此消息
        /// </summary>
        public const int WM_HOTKEY = 0x0312;

        /// <summary>
        /// 应用程序发送此消息给窗口，要求窗口在指定设备环境中绘制自己，一般情况下是打印机设备环境
        /// </summary>
        public const int WM_PRINT = 0x0317;

        /// <summary>
        /// 应用程序发送此消息给窗口，要求窗口在指定设备环境中绘制窗口客户区，一般情况下是打印机设备环境
        /// </summary>
        public const int WM_PRINTCLIENT = 0x0318;

        /// <summary>
        /// 帮助用户自定义消息，自定义消息可以为WM_APP+X，X为正整数
        /// </summary>
        public const int WM_APP = 0x8000;

        /// <summary>
        /// 帮助用户自定义消息，自定义消息可以为WM_USER+X，X为正整数
        /// </summary>
        public const int WM_USER = 0x0400;

    }
}
